/**
 * Progetto PRAISED.
 * 11/ott/2010
 */
package it.uniroma3.dia.praised.brenda.parser;

import it.uniroma3.dia.praised.brenda.validator.Validator;
import it.uniroma3.dia.praised.exception.CrawlerException;
import it.uniroma3.dia.praised.exception.FactoryException;
import it.uniroma3.dia.praised.factory.WebClientFactory;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

/**
 * ParserBrenda: Classe che estrae dalla root del sito web BRENDA l'insieme 
 * di link da analizzare nel seguito del processo di crawling.
 * 
 * @author Accosta Augusto
 * @author Lopez Elisabetta
 * 
 * @see it.uniroma3.dia.praised.brenda.validator.Validator
 * @version 1.0
 * 
 */
public class ParserBrenda {
	
	/**
	 * Costruttore di default che effettua le inizializzazioni delle variabili di classe
	 * @throws CrawlerException 
	 */
	public ParserBrenda() throws CrawlerException {

	}
	
	/**
	 * Metodo che recupera l'elenco dei link presenti all'interno di una pagina web
	 * 
	 * @param root - Url della radice del sito
	 * @return listaURL - Set di link estratti
	 * @throws CrawlerException 
	 */
	public List<URL> getHref(URL root) throws CrawlerException {
		try {
			HtmlPage page = WebClientFactory.newHtmlPage(root); // Recupero la pagina a partire dal WebClient
			
			List<HtmlAnchor> links = page.getAnchors(); // Recupero delle ancore 
			
			/* Infine per ogni ancora si recupera il link incluso nell'attributo href */
			List<URL> listURL = new ArrayList<URL>(links.size());
			
			for (HtmlAnchor htmlAnchor : links) {
				
				/* Costruzione statica del link appena estratto per formare un URL assoluto */
				URL url = Validator.buildURL(root, htmlAnchor.getHrefAttribute());
				if (url.toString().contains("ecno")) // Filtro solo i link che mi servono
					listURL.add(url);
			}
			return listURL;
			
		} catch (FactoryException e) {
			throw new CrawlerException(e);
		}
	}

}
